#############################################################################
# Variable definitions
EXE=.exe
OCAMLC=ocamlc
OCAMLOPT=ocamlopt
COMPILE_FLAGS=-w A -I +lablgtk2
LINK_FLAGS=-I +lablgtk2

PROGRAMS=subprocess_test$(EXE) subprocess_gui$(EXE)

#############################################################################
# Primary targets
.PHONY: all
all: $(PROGRAMS)

.PHONY: clean
clean:
	rm -f *.cmo *.cma $(PROGRAMS) *.o *~ *.cmi *.cmx *.stackdump *.html *.css

#############################################################################
# Building targets

subprocess.cmo : subprocess.cmi

subprocess_test$(EXE) : subprocess.cmo subprocess_test.cmo
	$(OCAMLC) -o $@ $(LINK_FLAGS) -thread unix.cma threads.cma str.cma $^

subprocess_gui$(EXE) : subprocess.cmx icons.cmx subprocess_gui.cmx
	$(OCAMLOPT) -o $@ $(LINK_FLAGS) -thread unix.cmxa threads.cmxa \
                          str.cmxa lablgtk.cmxa gtkInit.cmx gtkThread.cmx $^

#############################################################################
# Implicit targets

# Convenience target that prints out the inferred interface for the
# specified source file.
%.show_interface : %.ml
	$(OCAMLC) -i -thread $(COMPILE_FLAGS) $<

%.cmi : %.mli
	$(OCAMLC) -c -thread $(COMPILE_FLAGS) $< -o $@
%.cmo : %.ml
	$(OCAMLC) -c -thread $(COMPILE_FLAGS) $< -o $@
%.cmx : %.ml
	$(OCAMLOPT) -c -thread $(COMPILE_FLAGS) $< -o $@
